package com.woniuxy.userservice.util;

import com.aliyun.ocr_api20210707.models.RecognizeIdcardResponse;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ORCIdCardUtil {

    /**
     * 使用AK&SK初始化账号Client
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    private static com.aliyun.ocr_api20210707.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填，您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 必填，您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // Endpoint 请参考 https://api.aliyun.com/product/ocr-api
        config.endpoint = "ocr-api.cn-hangzhou.aliyuncs.com";
        return new com.aliyun.ocr_api20210707.Client(config);
    }

    public static AuthUser oauthIdCard(String path) throws Exception {
        // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代码泄露可能会导致 AccessKey 泄露，并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用，仅供参考，建议使用更安全的 STS 方式，更多鉴权访问方式请参见：https://help.aliyun.com/document_detail/378657.html
        com.aliyun.ocr_api20210707.Client client = createClient("LTAI5t9QDYaeGaJo1xQyGqvg",
                "6qZ4pKPTJtohteCilk96K8nwnNj1AH");
        // 需要安装额外的依赖库，直接点击下载完整工程即可看到所有依赖。
        java.io.InputStream bodyStream = com.aliyun.darabonba.stream.Client.readFromFilePath(path);
        com.aliyun.ocr_api20210707.models.RecognizeIdcardRequest recognizeIdcardRequest = new com.aliyun.ocr_api20210707.models.RecognizeIdcardRequest()
                .setBody(bodyStream)
                .setOutputFigure(false)
                .setOutputQualityInfo(false);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
            // 复制代码运行请自行打印 API 的返回值
            RecognizeIdcardResponse resp = client.recognizeIdcardWithOptions(recognizeIdcardRequest, runtime);
            String data = resp.getBody().getData();
            ObjectMapper objectMapper = new ObjectMapper();
            // 将JSON字符串解析为JsonNode对象
            JsonNode jsonNode = objectMapper.readTree(data);
            // 获取face节点下的data节点
            JsonNode dataNode = jsonNode.get("data").get("face").get("data");
            // 获取姓名
            String name = dataNode.get("name").asText();
            // 获取性别
            String sex = dataNode.get("sex").asText();
            // 获取身份证号码
            String idCardNum = dataNode.get("idNumber").asText();
            AuthUser authUser = new AuthUser();
            authUser.setName(name);
            authUser.setSex(sex);
            authUser.setIdCardNum(idCardNum);
            return authUser;
            /* 获取民族
            String ethnicity = dataNode.get("ethnicity").asText();
             获取出生日期
            String birthDate = dataNode.get("birthDate").asText();
             获取地址
            String address = dataNode.get("address").asText();
            */
    }
}
